﻿using System;
using System.Data;
using accesoDatos;

namespace Logica
{
    public class Formulario : EntidadAlmacenable
    {
        /* --------------------- Atributos de la clase. Recordar que hay atributos heredados --------------------- */
        private string nombreMenu = "";
        private String nombreCodigo = "";
        private String nombreParaUsuario = "";
        private String descripcion = "";

        public const string tablaBD = "formulario", columnaID = "id";


        /* --------------------- Propiedades --------------------- */
        public int ID
        {
            get { return this.id; }
            set { this.id = value; }
        }

        public String NombreMenu
        {
            get { return nombreMenu; }
            set { nombreMenu = value; }
        }

        public String NombreCodigo
        {
            get { return nombreCodigo; }
            set { nombreCodigo = value; }
        }

        public String NombreParaUsuario
        {
            get { return nombreParaUsuario; }
            set { nombreParaUsuario = value; }
        }

        public String Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }

        /* --------------------- Constructores --------------------- */
        public Formulario()
            : this(0) // Llamo al constructor que recibe un parámetro para reutilizar el código del mismo
        { }

        /* IMPORTANTE:
             ** Si el campo identificador unívoco de la tabla actual tuviese un nombre distinto de "id", se lo debe setear en este momento
             * (atributo heredado: nombreColumnaID)
             ** Si el campo identificador unívoco NO se generase automáticamente, se lo debe definir en este momento, cambiando el atributo
             * heredado idAutoGenerado por FALSE.
             */
        public Formulario(int idElem)
            : base() // Llamo al constructor padre en primer lugar, para inicializar los valores correspondientes
        {
            // Es importante esta asignación ya que estos valores se utilizan tanto en métodos del objeto padre como éste
            this.nombreTablaBD = tablaBD;
            this.nombreColumnaID = columnaID;
            this.id = idElem;

            // Si se hubiese enviado un id != 0, entonces se buscan los datos del elemento en la BD para cargarlos al objeto actual que se está creando
            if (this.id != 0)
            {
                DataRow elemento = this.buscarElemento(id);
                try
                {
                    if (elemento != null)
                    {
                        this.nombreCodigo = elemento["nombreMenu"].ToString().Trim();
                        this.nombreCodigo = elemento["nombreCodigo"].ToString().Trim();
                        this.nombreParaUsuario = elemento["nombreParaUsuario"].ToString().Trim();
                        this.descripcion = elemento["descripcion"].ToString().Trim();
                    }
                }
                catch (Exception ex)
                {
                    this.error = ex.Message;
                }
            }
        }

        public String guardar()
        {
            String[] columnas = new String[] { columnaID, "nombreCodigo", "nombreParaUsuario", "descripcion" };
            String[] valores = new String[] { this.id.ToString(), this.nombreCodigo.Trim().ToUpper(), this.nombreParaUsuario.Trim().ToUpper(), this.descripcion.Trim().ToUpper() };

            return base.guardarElemento(columnas, valores);
        }
    }
}
